home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / util / gnu / a2_0bEmacs_bin.lha / Emacs-19.25 / info / regex < prev    next >
Text File  |  1992-11-15  |  24KB  |  602 lines

  1. Info file regex, produced by Makeinfo, -*- Text -*- from input file
  2. regex.texinfo.
  3.  
  4.  
  5. 
  6. File: regex,  Node: top,  Next: syntax,  Up: (dir)
  7.  
  8. "regex" regular expression matching library.
  9. ********************************************
  10.  
  11. Overview
  12. ========
  13.  
  14. Regular expression matching allows you to test whether a string fits
  15. into a specific syntactic shape.  You can also search a string for a
  16. substring that fits a pattern.
  17.  
  18. A regular expression describes a set of strings.  The simplest case
  19. is one that describes a particular string; for example, the string
  20. `foo' when regarded as a regular expression matches `foo' and nothing
  21. else.  Nontrivial regular expressions use certain special constructs
  22. so that they can match more than one string.  For example, the
  23. regular expression `foo\|bar' matches either the string `foo' or the
  24. string `bar'; the regular expression `c[ad]*r' matches any of the
  25. strings `cr', `car', `cdr', `caar', `cadddar' and all other such
  26. strings with any number of `a''s and `d''s.
  27.  
  28. The first step in matching a regular expression is to compile it. 
  29. You must supply the pattern string and also a pattern buffer to hold
  30. the compiled result.  That result contains the pattern in an internal
  31. format that is easier to use in matching.
  32.  
  33. Having compiled a pattern, you can match it against strings.  You can
  34. match the compiled pattern any number of times against different
  35. strings.
  36.  
  37. * Menu:
  38.  
  39. * syntax::    Syntax of regular expressions
  40. * directives::    Meaning of characters as regex string directives.
  41. * emacs::    Additional character directives available
  42.           only for use within Emacs.
  43. * programming:: Using the regex library from C programs
  44. * unix::    Unix-compatible entry-points to regex library
  45.  
  46.  
  47. 
  48. File: regex,  Node: syntax,  Next: directives,  Prev: top,  Up: top
  49.  
  50. Syntax of Regular Expressions
  51. =============================
  52.  
  53. Regular expressions have a syntax in which a few characters are
  54. special constructs and the rest are "ordinary".  An ordinary
  55. character is a simple regular expression which matches that character
  56. and nothing else.  The special characters are `$', `^', `.', `*',
  57. `+', `?', `[', `]' and `\'.  Any other character appearing in a
  58. regular expression is ordinary, unless a `\' precedes it.
  59.  
  60. For example, `f' is not a special character, so it is ordinary, and
  61. therefore `f' is a regular expression that matches the string `f' and
  62. no other string.  (It does *not* match the string `ff'.)  Likewise,
  63. `o' is a regular expression that matches only `o'.
  64.  
  65. Any two regular expressions A and B can be concatenated.  The result
  66. is a regular expression which matches a string if A matches some
  67. amount of the beginning of that string and B matches the rest of the
  68. string.
  69.  
  70. As a simple example, we can concatenate the regular expressions `f'
  71. and `o' to get the regular expression `fo', which matches only the
  72. string `fo'.  Still trivial.
  73.  
  74. Note: for Unix compatibility, special characters are treated as
  75. ordinary ones if they are in contexts where their special meanings
  76. make no sense.  For example, `*foo' treats `*' as ordinary since
  77. there is no preceding expression on which the `*' can act.  It is
  78. poor practice to depend on this behavior; better to quote the special
  79. character anyway, regardless of where is appears.
  80.  
  81.  
  82. 
  83. File: regex,  Node: directives,  Next: emacs,  Prev: syntax,  Up: top
  84.  
  85. The following are the characters and character sequences which have
  86. special meaning within regular expressions.  Any character not
  87. mentioned here is not special; it stands for exactly itself for the
  88. purposes of searching and matching.  *Note syntax::.
  89.  
  90. `.'
  91.      is a special character that matches anything except a newline. 
  92.      Using concatenation, we can make regular expressions like `a.b'
  93.      which matches any three-character string which begins with `a'
  94.      and ends with `b'.
  95.  
  96. `*'
  97.      is not a construct by itself; it is a suffix, which means the
  98.      preceding regular expression is to be repeated as many times as
  99.      possible.  In `fo*', the `*' applies to the `o', so `fo*'
  100.      matches `f' followed by any number of `o''s.
  101.  
  102.      The case of zero `o''s is allowed: `fo*' does match `f'.
  103.  
  104.      `*' always applies to the *smallest* possible preceding
  105.      expression.  Thus, `fo*' has a repeating `o', not a repeating
  106.      `fo'.
  107.  
  108.      The matcher processes a `*' construct by matching, immediately,
  109.      as many repetitions as can be found.  Then it continues with the
  110.      rest of the pattern.  If that fails, backtracking occurs,
  111.      discarding some of the matches of the `*''d construct in case
  112.      that makes it possible to match the rest of the pattern.  For
  113.      example, matching `c[ad]*ar' against the string `caddaar', the
  114.      `[ad]*' first matches `addaa', but this does not allow the next
  115.      `a' in the pattern to match.  So the last of the matches of
  116.      `[ad]' is undone and the following `a' is tried again.  Now it
  117.      succeeds.
  118.  
  119. `+'
  120.      `+' is like `*' except that at least one match for the preceding
  121.      pattern is required for `+'.  Thus, `c[ad]+r' does not match
  122.      `cr' but does match anything else that `c[ad]*r' would match.
  123.  
  124. `?'
  125.      `?' is like `*' except that it allows either zero or one match
  126.      for the preceding pattern.  Thus, `c[ad]?r' matches `cr' or
  127.      `car' or `cdr', and nothing else.
  128.  
  129. `[ ... ]'
  130.      `[' begins a "character set", which is terminated by a `]'.  In
  131.      the simplest case, the characters between the two form the set. 
  132.      Thus, `[ad]' matches either `a' or `d', and `[ad]*' matches any
  133.      string of `a''s and `d''s (including the empty string), from
  134.      which it follows that `c[ad]*r' matches `car', etc.
  135.  
  136.      Character ranges can also be included in a character set, by
  137.      writing two characters with a `-' between them.  Thus, `[a-z]'
  138.      matches any lower-case letter.  Ranges may be intermixed freely
  139.      with individual characters, as in `[a-z$%.]', which matches any
  140.      lower case letter or `$', `%' or period.
  141.  
  142.      Note that the usual special characters are not special any more
  143.      inside a character set.  A completely different set of special
  144.      characters exists inside character sets: `]', `-' and `^'.
  145.  
  146.      To include a `]' in a character set, you must make it the first
  147.      character.  For example, `[]a]' matches `]' or `a'.  To include
  148.      a `-', you must use it in a context where it cannot possibly
  149.      indicate a range: that is, as the first character, or
  150.      immediately after a range.
  151.  
  152. `[^ ... ]'
  153.      `[^' begins a "complement character set", which matches any
  154.      character except the ones specified.  Thus, `[^a-z0-9A-Z]'
  155.      matches all characters *except* letters and digits.
  156.  
  157.      `^' is not special in a character set unless it is the first
  158.      character.  The character following the `^' is treated as if it
  159.      were first (it may be a `-' or a `]').
  160.  
  161. `^'
  162.      is a special character that matches the empty string -- but only
  163.      if at the beginning of a line in the text being matched. 
  164.      Otherwise it fails to match anything.  Thus, `^foo' matches a
  165.      `foo' which occurs at the beginning of a line.
  166.  
  167. `$'
  168.      is similar to `^' but matches only at the end of a line.  Thus,
  169.      `xx*$' matches a string of one or more `x''s at the end of a line.
  170.  
  171. `\'
  172.      has two functions: it quotes the above special characters
  173.      (including `\'), and it introduces additional special constructs.
  174.  
  175.      Because `\' quotes special characters, `\$' is a regular
  176.      expression which matches only `$', and `\[' is a regular
  177.      expression which matches only `[', and so on.
  178.  
  179.      For the most part, `\' followed by any character matches only
  180.      that character.  However, there are several exceptions:
  181.      characters which, when preceded by `\', are special constructs. 
  182.      Such characters are always ordinary when encountered on their own.
  183.  
  184.      No new special characters will ever be defined.  All extensions
  185.      to the regular expression syntax are made by defining new
  186.      two-character constructs that begin with `\'.
  187.  
  188. `\|'
  189.      specifies an alternative.  Two regular expressions A and B with
  190.      `\|' in between form an expression that matches anything that
  191.      either A or B will match.
  192.  
  193.      Thus, `foo\|bar' matches either `foo' or `bar' but no other
  194.      string.
  195.  
  196.      `\|' applies to the largest possible surrounding expressions. 
  197.      Only a surrounding `\( ... \)' grouping can limit the grouping
  198.      power of `\|'.
  199.  
  200.      Full backtracking capability exists when multiple `\|''s are used.
  201.  
  202. `\( ... \)'
  203.      is a grouping construct that serves three purposes:
  204.  
  205.        1. To enclose a set of `\|' alternatives for other operations.
  206.           Thus, `\(foo\|bar\)x' matches either `foox' or `barx'.
  207.  
  208.        2. To enclose a complicated expression for the postfix `*' to
  209.           operate on.  Thus, `ba\(na\)*' matches `bananana', etc.,
  210.           with any (zero or more) number of `na''s.
  211.  
  212.        3. To mark a matched substring for future reference.
  213.  
  214.      This last application is not a consequence of the idea of a
  215.      parenthetical grouping; it is a separate feature which happens
  216.      to be assigned as a second meaning to the same `\( ... \)'
  217.      construct because there is no conflict in practice between the
  218.      two meanings.  Here is an explanation of this feature:
  219.  
  220. `\DIGIT'
  221.      After the end of a `\( ... \)' construct, the matcher remembers
  222.      the beginning and end of the text matched by that construct. 
  223.      Then, later on in the regular expression, you can use `\'
  224.      followed by DIGIT to mean "match the same text matched the
  225.      DIGIT'th time by the `\( ... \)' construct."  The `\( ... \)'
  226.      constructs are numbered in order of commencement in the regexp.
  227.  
  228.      The strings matching the first nine `\( ... \)' constructs
  229.      appearing in a regular expression are assigned numbers 1 through
  230.      9 in order of their beginnings.  `\1' through `\9' may be used
  231.      to refer to the text matched by the corresponding `\( ... \)'
  232.      construct.
  233.  
  234.      For example, `\(.*\)\1' matches any string that is composed of
  235.      two identical halves.  The `\(.*\)' matches the first half,
  236.      which may be anything, but the `\1' that follows must match the
  237.      same exact text.
  238.  
  239. `\b'
  240.      matches the empty string, but only if it is at the beginning or
  241.      end of a word.  Thus, `\bfoo\b' matches any occurrence of `foo'
  242.      as a separate word.  `\bball\(s\|\)\b' matches `ball' or `balls'
  243.      as a separate word.
  244.  
  245. `\B'
  246.      matches the empty string, provided it is *not* at the beginning
  247.      or end of a word.
  248.  
  249. `\<'
  250.      matches the empty string, but only if it is at the beginning of
  251.      a word.
  252.  
  253. `\>'
  254.      matches the empty string, but only if it is at the end of a word.
  255.  
  256. `\w'
  257.      matches any word-constituent character.
  258.  
  259. `\W'
  260.      matches any character that is not a word-constituent.
  261.  
  262. There are a number of additional `\' regexp directives available for
  263. use within Emacs only.
  264.  
  265. (*note emacs::.).
  266.  
  267.  
  268. 
  269. File: regex,  Node: emacs,  Next: programming,  Prev: directives,  Up: top
  270.  
  271. Constructs Available in Emacs Only
  272. ----------------------------------
  273.  
  274. `\`'
  275.      matches the empty string, but only if it is at the beginning of
  276.      the buffer.
  277.  
  278. `\''
  279.      matches the empty string, but only if it is at the end of the
  280.      buffer.
  281.  
  282. `\sCODE'
  283.      matches any character whose syntax is CODE.  CODE is a letter
  284.      which represents a syntax code: thus, `w' for word constituent,
  285.      `-' for whitespace, `(' for open-parenthesis, etc.  See the
  286.      documentation for the Emacs function `modify-syntax-entry' for
  287.      further details.
  288.  
  289.      Thus, `\s(' matches any character with open-parenthesis syntax.
  290.  
  291. `\SCODE'
  292.      matches any character whose syntax is not CODE.
  293.  
  294.  
  295. 
  296. File: regex,  Node: programming,  Next: compiling,  Prev: emacs,  Up: top
  297.  
  298. Programming using the `regex' library
  299. =====================================
  300.  
  301. The subnodes accessible from this menu give information on entry
  302. points and data structures which C programs need to interface to the
  303. `regex' library.
  304.  
  305. * Menu:
  306.  
  307. * compiling::    How to compile regular expressions
  308. * matching::    Matching compiled regular expressions
  309. * searching::    Searching for compiled regular expressions
  310. * translation::    Translating characters into other characters
  311.           (for both compilation and matching)
  312. * registers::    determining what was matched
  313. * split::    matching data which is split into two pieces
  314. * unix::    Unix-compatible entry-points to regex library
  315.  
  316.  
  317. 
  318. File: regex,  Node: compiling,  Next: matching,  Prev: programming,  Up: programming
  319.  
  320. Compiling a Regular Expression
  321. ------------------------------
  322.  
  323. To compile a regular expression, you must supply a pattern buffer. 
  324. This is a structure defined, in the include file `regex.h', as
  325. follows:
  326.  
  327.      struct re_pattern_buffer
  328.        {
  329.          char *buffer   /* Space holding the compiled pattern commands. */
  330.          int allocated  /* Size of space that  buffer  points to */
  331.          int used       /* Length of portion of buffer actually occupied */
  332.          char *fastmap; /* Pointer to fastmap, if any, or zero if none. */
  333.                         /* re_search uses the fastmap, if there is one,
  334.                            to skip quickly over totally implausible
  335.                            characters */
  336.          char *translate;
  337.                         /* Translate table to apply to characters before
  338.                            comparing, or zero for no translation.
  339.                            The translation is applied to a pattern when
  340.                            it is compiled and to data when it is matched. */
  341.          char fastmap_accurate;
  342.                         /* Set to zero when a new pattern is stored,
  343.                            set to one when the fastmap is updated from it. */
  344.        };
  345.  
  346. Before compiling a pattern, you must initialize the `buffer' field to
  347. point to a block of memory obtained with `malloc', and the
  348. `allocated' field to the size of that block, in bytes.  The pattern
  349. compiler will replace this block with a larger one if necessary.
  350.  
  351. You must also initialize the `translate' field to point to the
  352. translate table that you will use when you match the compiled
  353. pattern, or to zero if you will use no translate table when you
  354. match.  *Note translation::.
  355.  
  356. Then call `re_compile_pattern' to compile a regular expression into
  357. the buffer:
  358.  
  359.      re_compile_pattern (REGEX, REGEX_SIZE, BUF)
  360.  
  361. REGEX is the address of the regular expression (`char *'), REGEX_SIZE
  362. is its length (`int'), BUF is the address of the buffer (`struct
  363. re_pattern_buffer *').
  364.  
  365. `re_compile_pattern' returns zero if it succeeds in compiling the
  366. regular expression.  In that case, `*buf' now contains the results. 
  367. Otherwise, `re_compile_pattern' returns a string which serves as an
  368. error message.
  369.  
  370. After compiling, if you wish to search for the pattern, you must
  371. initialize the `fastmap' component of the pattern buffer.  *Note
  372. searching::.
  373.  
  374.  
  375. 
  376. File: regex,  Node: matching,  Next: searching,  Prev: compiling,  Up: programming
  377.  
  378. Matching a Compiled Pattern
  379. ---------------------------
  380.  
  381. Once a regular expression has been compiled into a pattern buffer,
  382. you can match the pattern buffer against a string with `re_match'.
  383.  
  384.      re_match (BUF, STRING, SIZE, POS, REGS)
  385.  
  386. BUF is, once again, the address of the buffer (`struct
  387. re_pattern_buffer *').  STRING is the string to be matched (`char *').
  388. sIZE is the length of that string (`int').  POS is the position
  389. within the string at which to begin matching (`int').  The beginning
  390. of the string is position 0.  REGS is described below.  Normally it
  391. is zero.  *Note registers::.
  392.  
  393. `re_match' returns `-1' if the pattern does not match; otherwise, it
  394. returns the length of the portion of `string' which was matched.
  395.  
  396. For example, suppose that BUF points to a buffer containing the
  397. result of compiling `x*', STRING points to `xxxxxy', and SIZE is `6'.
  398. Suppose that POS is `2'.  Then the last three `x''s will be matched,
  399. so `re_match' will return `3'.  If POS is zero, the value will be `5'.
  400. If POS is `5' or `6', the value will be zero, meaning that the null
  401. string was successfully matched.  Note that since `x*' matches the
  402. empty string, it will never entirely fail.
  403.  
  404. It is up to the caller to avoid passing a value of POS that results
  405. in matching outside the specified string.  POS must not be negative
  406. and must not be greater than SIZE.
  407.  
  408.  
  409. 
  410. File: regex,  Node: searching,  Next: translation,  Prev: matching,  Up: programming
  411.  
  412. Searching for a Match
  413. ---------------------
  414.  
  415. Searching means trying successive starting positions for a match
  416. until a match is found.  To search, you supply a compiled pattern
  417. buffer.  Before searching you must initialize the `fastmap' field of
  418. the pattern buffer (see below).
  419.  
  420.      re_search (BUF, STRING, SIZE, STARTPOS, RANGE, REGS)
  421.  
  422. is called like `re_match' except that the POS argument is replaced by
  423. two arguments STARTPOS and RANGE.  `re_search' tests for a match
  424. starting at index STARTPOS, then at `STARTPOS + 1', and so on.  It
  425. tries RANGE consecutive positions before giving up and returning
  426. `-1'.  If a match is found, `re_search' returns the index at which
  427. the match was found.
  428.  
  429. If RANGE is negative, RE_SEARCH tries starting positions STARTPOS,
  430. `STARTPOS - 1', ... in that order.  `|RANGE|' is the number of tries
  431. made.
  432.  
  433. It is up to the caller to avoid passing value of STARTPOS and RANGE
  434. that result in matching outside the specified string.  STARTPOS must
  435. be between zero and SIZE, inclusive, and so must `STARTPOS + RANGE -
  436. 1' (if RANGE is positive) or `STARTPOS + RANGE + 1' (if RANGE is
  437. negative).
  438.  
  439. If you may be searching over a long distance (that is, trying many
  440. different match starting points) with a compiled pattern, you should
  441. use a "fastmap" in it.  This is a block of 256 bytes, whose address
  442. is placed in the `fastmap' component of the pattern buffer.  The
  443. first time you search for a particular compiled pattern, the fastmap
  444. is set so that `FASTMAP[CH]' is nonzero if the character CH might
  445. possibly start a match for this pattern.  `re_search' checks each
  446. character against the fastmap so that it can skip more quickly over
  447. non-matches.
  448.  
  449. If you do not want a fastmap, store zero in the `fastmap' component
  450. of the pattern buffer before calling `re_search'.
  451.  
  452. In either case, you must initialize this component in a pattern
  453. buffer before you can use that buffer in a search; but you can choose
  454. as an initial value either zero or the address of a suitable block of
  455. memory.
  456.  
  457. If you compile a new pattern in an existing pattern buffer, it is not
  458. necessary to reinitialize the `fastmap' component (unless you wish to
  459. override your previous choice).
  460.  
  461.  
  462. 
  463. File: regex,  Node: translation,  Next: registers,  Prev: searching,  Up: programming
  464.  
  465. Translate Tables
  466. ----------------
  467.  
  468. With a translate table, you can apply a transformation to all
  469. characters before they are compared.  For example, a table that maps
  470. lower case letters into upper case (or vice versa) causes differences
  471. in case to be ignored by matching.
  472.  
  473. A translate table is a block of 256 bytes.  Each character of raw
  474. data is used as an index in the translate table.  The value found
  475. there is used instead of the original character.  Each character in a
  476. regular expression, except for the syntactic constructs, is
  477. translated when the expression is compiled.  Each character of a
  478. string being matched is translated whenever it is compared or tested.
  479.  
  480. A suitable translate table to ignore differences in case maps all
  481. characters into themselves, except for lower case letters, which are
  482. mapped into the corresponding upper case letters.  It could be
  483. initialized by:
  484.  
  485.      for (i = 0; i < 0400; i++)
  486.        table[i] = i;
  487.      for (i = 'a'; i <= 'z'; i++)
  488.        table[i] = i - 040;
  489.  
  490. You specify the use of a translate table by putting its address in
  491. the TRANSLATE component of the compiled pattern buffer.  If this
  492. component is zero, no translation is done.  Since both compilation
  493. and matching use the translate table, you must use the same table
  494. contents for both operations or confusing things will happen.
  495.  
  496.  
  497. 
  498. File: regex,  Node: registers,  Next: split,  Prev: translation,  Up: programming
  499.  
  500. Registers: or "What Did the `\( ... \)' Groupings Actually Match?"
  501. ------------------------------------------------------------------
  502.  
  503. If you want to find out, after the match, what each of the first nine
  504. `\( ... \)' groupings actually matched, you can pass the REGS
  505. argument to the match or search function.  Pass the address of a
  506. structure of this type:
  507.  
  508.      struct re_registers
  509.        {
  510.          int start[RE_NREGS];
  511.          int end[RE_NREGS];
  512.        };
  513.  
  514.   `re_match' and `re_search' will store into this structure the data
  515. you want.  `REGS->start[REG]' will be the index in STRING of the
  516. beginning of the data matched by the REG'th `\( ... \)' grouping, and
  517. `REGS->end[REG]' will be the index of the end of that data (the index
  518. of the first character beyond those matched).  The values in the
  519. start and end arrays at indexes greater than the number of `\( ...
  520. \)' groupings present in the regular expression will be set to the
  521. value -1.  Register numbers start at 1 and run to `RE_NREGS - 1'
  522. (normally `9').  `REGS->start[0]' and `REGS->end[0]' are similar but
  523. describe the extent of the substring matched by the entire pattern.
  524.  
  525.   Both `struct re_registers' and `RE_NREGS' are defined in `regex.h'.
  526.  
  527.  
  528. 
  529. File: regex,  Node: split,  Next: unix,  Prev: registers,  Up: programming
  530.  
  531. Matching against Split Data
  532. ---------------------------
  533.  
  534. The functions `re_match_2' and `re_search_2' allow one to match in or
  535. search data which is divided into two strings.
  536.  
  537. `re_match_2' works like `re_match' except that two data strings and
  538. sizes must be given.
  539.  
  540.      re_match_2 (BUF, STRING1, SIZE1, STRING2, SIZE2, POS, REGS)
  541.  
  542. The matcher regards the contents of STRING1 as effectively followed
  543. by the contents of STRING2, and matches the combined string against
  544. the pattern in BUF.
  545.  
  546. `re_search_2' is likewise similar to `re_search':
  547.  
  548.      re_search_2 (BUF, STRING1, SIZE1, STRING2, SIZE2, STARTPOS, RANGE, REGS)
  549.  
  550. The value returned by RE_SEARCH_2 is an index into the combined data
  551. made up of STRING1 and STRING2.  It never exceeds `SIZE1 + SIZE2'. 
  552. The values returned in the REGS structure (if there is one) are
  553. likewise indices in the combined data.
  554.  
  555.  
  556. 
  557. File: regex,  Node: unix,  Prev: split,  Up: programming
  558.  
  559. Unix-Compatible Entry Points
  560. ----------------------------
  561.  
  562. The standard Berkeley Unix way to compile a regular expression is to
  563. call `re_comp'.  This function takes a single argument, the address
  564. of the regular expression, which is assumed to be terminated by a
  565. null character.
  566.  
  567. `re_comp' does not ask you to specify a pattern buffer because it has
  568. its own pattern buffer -- just one.  Using `re_comp', one may match
  569. only the most recently compiled regular expression.
  570.  
  571. The value of `re_comp' is zero for success or else an error message
  572. string, as for `re_compile_pattern'.
  573.  
  574. Calling `re_comp' with the null string as argument it has no effect;
  575. the contents of the buffer remain unchanged.
  576.  
  577. The standard Berkeley Unix way to match the last regular expression
  578. compiled is to call `re_exec'.  This takes a single argument, the
  579. address of the string to be matched.  This string is assumed to be
  580. terminated by a null character.  Matching is tried starting at each
  581. position in the string.  `re_exec' returns `1' for success or `0' for
  582. failure.  One cannot find out how long a substring was matched, nor
  583. what the `\( ... \)' groupings matched.
  584.  
  585.  
  586. 
  587. Tag Table:
  588. Node: top85
  589. Node: syntax1706
  590. Node: directives3241
  591. Node: emacs10891
  592. Node: programming11653
  593. Node: compiling12381
  594. Node: matching14827
  595. Node: searching16269
  596. Node: translation18534
  597. Node: registers19952
  598. Node: split21245
  599. Node: unix22183
  600. 
  601. End Tag Table
  602.